home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 43.zip / Guru Crackers Utilities.adf / cruncher.s < prev    next >
Text File  |  1987-06-04  |  3KB  |  234 lines

  1. ; cruncher
  2.  
  3. start = $30000    ; start of data
  4. write = $30000    ; destination address
  5. stop  = $3e000    ; end of data
  6. offset = $800    ; maximum offset
  7.  
  8. s:
  9. lea start,a0    
  10. lea stop,a1    
  11. lea write,a2    
  12. moveq #1,d2    
  13. clr.w d1    
  14. clr.l d7    
  15.  
  16. noteocrunch:
  17. jsr crunch    
  18.         
  19. tst.b d0
  20. beq.S crunched
  21. addq.w #1,d1
  22. cmpi.w #265,d1
  23. bne.S nojmp
  24. jsr dojmp
  25.  
  26. nojmp:
  27. crunched:
  28. cmp.l a0,a1
  29. bgt.S noteocrunch
  30.  
  31. jsr dojmp    
  32.  
  33. jsr write1lwd    
  34. move.l d7,(a2)+    
  35.  
  36. lea start,a0
  37. lea stop,a1
  38. move.l a1,d2    
  39.         
  40. sub.l a0,d2
  41. move.l d2,(a2)+    
  42.  
  43. clr.l d0
  44. clr.l d1
  45. clr.l d2
  46. clr.l d3
  47. clr.l d4
  48. clr.l d5
  49. lea cnt,a3
  50. movem.w (a3)+,d0-d5
  51. move.l a2,a3
  52. sub.l a0,a3
  53. lea stop,a4
  54. sub.l a2,a4
  55. illegal
  56.  
  57. crunch:
  58. move.l a0,a3
  59. add.l #offset,a3
  60. cmp.l a1,a3    
  61. ble.S nottop
  62. move.l a1,a3    
  63.  
  64. nottop:
  65. moveq #$1,d5    
  66. move.l a0,a5    
  67. addq #$1,a5
  68.  
  69. contcrunch:
  70.  
  71. move.b (a0),d3    
  72. move.b $1(a0),d4
  73.  
  74. quickfind:
  75. cmp.b (a5)+,d3    
  76. bne.S contfind    
  77. cmp.b (a5),d4
  78. beq.S lenfind
  79.  
  80. contfind:
  81. cmp.l a5,a3
  82. bgt.S quickfind
  83. jmp endquickfind
  84.  
  85. lenfind:
  86. subq #1,a5    
  87. move.l a0,a4    
  88.  
  89. scan:
  90. move.b (a4)+,d3    
  91.         
  92. cmp.b (a5)+,d3
  93. bne.S endequ
  94. cmp.l a5,a3
  95. bgt.S scan
  96.  
  97. endequ:
  98. move.l a4,d3    
  99. sub.l a0,d3    
  100. subq.l #1,d3
  101. cmp.l d3,d5    
  102. bge.S nocrunch    
  103.  
  104. move.l a5,d4    
  105. sub.l a0,d4    
  106. sub.l d3,d4
  107. subq #1,d4    
  108.  
  109. cmp.l #$4,d3
  110. ble.S small
  111.  
  112. moveq  #$6,d6    
  113. cmp.l #$00000101,d3    
  114. blt.S oksafe
  115. move.w #$100,d3        
  116. oksafe:
  117. bra.S cont1
  118.  
  119. small:
  120. move.w d3,d6    
  121. subq.w #$2,d6    
  122. lsl.w #1,d6
  123.  
  124. cont1:
  125. lea table,a6    
  126. cmp.w (a6,d6.w),d4    
  127. bge.S nocrunch        
  128. move.l d3,d5        
  129. move.l d4,maxsoffset
  130. move.b d6,tbloffset
  131.  
  132. nocrunch:
  133. cmp.l a5,a3    
  134. bgt.S contcrunch    
  135.  
  136. endquickfind:    
  137.  
  138. cmp.l #$1,d5        
  139. beq.S nothingfound
  140.  
  141. jsr dojmp    
  142.  
  143. move.b tbloffset,d6
  144. move.l maxsoffset,d3
  145. move.w 8(a6,d6.w),d0    
  146. jsr wd0bits        
  147.  
  148. move.w 16(a6,d6.w),d0    
  149. beq.S nolength        
  150. move.l d5,d3        
  151. subq #1,d3
  152. jsr wd0bits
  153.  
  154. nolength:
  155. move.w 24(a6,d6.w),d0    
  156. move.w 32(a6,d6.w),d3    
  157. jsr wd0bits        
  158.  
  159. addi.w #$1,40(a6,d6.w)
  160. addi.w #$1,$dff180
  161.  
  162. add.l d5,a0    
  163. clr.b d0    
  164. rts
  165.  
  166. nothingfound:
  167. move.b (a0)+,d3
  168. moveq #$8,d0
  169. jsr wd0bits
  170. moveq #$1,d0
  171. rts
  172.  
  173. maxsoffset: dc.l 0
  174. tbloffset:  dc.w 0
  175.  
  176. table:
  177. offst:    dc.w $0100,$0200,$0400,$1000
  178. lnoff:    dc.w $0008,$0009,$000a,$000c
  179. length:    dc.w $0000,$0000,$0000,$0008
  180. cdlen:    dc.w $0002,$0003,$0003,$0003
  181. code:    dc.w $0001,$0004,$0005,$0006
  182. cnt:    dc.w $0,$0,$0,$0
  183. cntjmp: dc.w $0,$0
  184.  
  185.  
  186. dojmp:
  187. tst.w d1
  188. beq.S skipjmp
  189. move.w d1,d3
  190. clr.w d1
  191. cmp.w #9,d3
  192. bge.S bigjmp
  193. addq.w #1,cntjmp
  194. subq.w #1,d3
  195. ;or.b #%00000000,d3    
  196. moveq #5,d0        
  197. jmp wd0bits
  198.  
  199. skipjmp: rts
  200.  
  201. bigjmp:
  202. addq.w #1,cntjmp+2
  203. subi.w #9,d3
  204. or.w #%0000011100000000,d3    
  205. moveq #11,d0            
  206. jmp wd0bits
  207.  
  208. wd0bits:    
  209. subq.w #1,d0
  210. copybits:
  211. lsr.l #1,d3    
  212. roxl.l #1,d2    
  213. bcs.S writelwd    
  214. dbf d0,copybits
  215. rts
  216. write1lwd: clr.w d0    
  217.  
  218. writelwd: move.l d2,(a2)+    
  219. eor.l d2,d7            
  220. moveq #1,d2            
  221. dbf d0,copybits            
  222. rts
  223.  
  224. END
  225.  
  226. ; Written by LORD BLITTER
  227.  
  228. ; Christian MORANT
  229. ; 8, av. des Pagodes
  230. ; 1020 Brussels
  231. ; Belgium
  232.  
  233. ; official dealer : BS1
  234.